ক্লোজার (Clojure) এপ্লিকেশন তৈরির পর সেটিকে ডিস্ট্রিবিউশন ও ডিপ্লয়মেন্টের জন্য বিভিন্নভাবে প্যাকেজ করা যেতে পারে। এই প্যাকেজিংয়ের মাধ্যমে ক্লোজার অ্যাপ্লিকেশনগুলো সহজে অন্য সিস্টেমে রান করানো, ডিপ্লয়মেন্ট প্রক্রিয়া সহজ করা এবং অন্যান্য পরিবেশে ব্যবহারযোগ্য করা যায়।
Uberjar প্যাকেজিং
Uberjar হলো একটি সেল্ফ-কন্টেইনড JAR ফাইল, যা সম্পূর্ণ অ্যাপ্লিকেশন এবং এর সকল ডিপেন্ডেন্সি অন্তর্ভুক্ত করে। এতে জাভা পরিবেশে সরাসরি রান করা সম্ভব হয়। এটি জাভা ভিত্তিক সার্ভার বা ক্লাউড প্ল্যাটফর্মে ডিপ্লয়মেন্টের জন্য বেশ উপযোগী।
lein uberjar
কমান্ড চালিয়ে একটি Uberjar তৈরি করতে হবে।; project.clj ফাইল
(defproject my-app "0.1.0-SNAPSHOT"
:main my-app.core
:dependencies [[org.clojure/clojure "1.10.3"]])
; uberjar তৈরি করার জন্য
$ lein uberjar
তৈরি হওয়া Uberjar ফাইলটি জাভা দিয়ে সরাসরি রান করা যায়:
java -jar target/my-app-0.1.0-SNAPSHOT-standalone.jar
Native Image Packaging (GraalVM)
GraalVM ব্যবহার করে Clojure অ্যাপ্লিকেশনকে একটি নেটিভ এক্সিকিউটেবল হিসেবে প্যাকেজ করা যায়। এতে স্টার্টআপ টাইম এবং মেমোরি ব্যবহারে কার্যক্ষমতা বৃদ্ধি পায়। GraalVM এ Clojure অ্যাপ্লিকেশন কম্পাইল করার জন্য native-image টুল ব্যবহার করা হয়।
native-image
টুল ব্যবহার করে Clojure কোডকে একটি নেটিভ এক্সিকিউটেবলে কম্পাইল করতে হবে।lein uberjar ; প্রথমে uberjar তৈরি করতে হবে
native-image -jar target/my-app-0.1.0-SNAPSHOT-standalone.jar my-app
তৈরি হওয়া my-app
এক্সিকিউটেবল ফাইলটি সরাসরি রান করা যাবে:
./my-app
Docker Packaging
Docker একটি কনটেইনারাইজেশন টুল যা ক্লোজার অ্যাপ্লিকেশন প্যাকেজ এবং ডিপ্লয় করতে অনেক কার্যকর। Dockerfile ব্যবহার করে ক্লোজার অ্যাপ্লিকেশনকে কনটেইনার ইমেজ হিসেবে প্যাকেজ করা যায় এবং তা যে কোনো কনটেইনার পরিবেশে রান করা যায়।
# Dockerfile
FROM clojure:openjdk-11-tools-deps AS build
WORKDIR /app
COPY . /app
RUN clj -M -e "(println \"Compiling project...\")"
FROM openjdk:11-jre-slim
COPY --from=build /app/target/my-app-standalone.jar /app/app.jar
CMD ["java", "-jar", "/app/app.jar"]
Docker ইমেজ তৈরি এবং রান করার জন্য:
docker build -t my-app .
docker run -p 3000:3000 my-app
WAR Packaging (for Web Apps)
ওয়েব অ্যাপ্লিকেশন (বিশেষত Ring ভিত্তিক) তৈরির ক্ষেত্রে, WAR (Web Application Archive) ফাইল ব্যবহার করে ক্লোজার অ্যাপ্লিকেশনকে প্যাকেজ করা যায়। এটি টমক্যাট বা জেটি-এর মতো জাভা সার্ভারগুলিতে রান করতে ব্যবহৃত হয়।
project.clj
ফাইলে সেটআপ করতে হবে।lein ring uberwar
কমান্ড ব্যবহার করে WAR প্যাকেজ তৈরি করতে হবে।; project.clj ফাইল
(defproject my-web-app "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.3"]
[ring "1.9.0"]]
:plugins [[lein-ring "0.12.5"]]
:ring {:handler my-web-app.core/app})
; WAR প্যাকেজ তৈরি
$ lein ring uberwar
তৈরি হওয়া WAR ফাইলটি টমক্যাট সার্ভারে ডিপ্লয় করা যাবে।
প্যাকেজিং পদ্ধতি | ব্যবহারের উদ্দেশ্য |
---|---|
Uberjar | সহজ এবং জাভা পরিবেশে সরাসরি রান করার জন্য উপযুক্ত |
Native Image | স্টার্টআপ টাইম এবং মেমোরি ব্যবহারে দক্ষ, GraalVM সাপোর্টেড পরিবেশে |
Docker | কনটেইনারাইজড ডিপ্লয়মেন্টের জন্য, ক্লাউড এবং ডকার সমর্থিত পরিবেশে |
WAR | জাভা সার্ভারে রান করার জন্য উপযুক্ত, বিশেষত টমক্যাট বা জেটি পরিবেশে |
Clojure অ্যাপ্লিকেশন প্যাকেজিংয়ের বিভিন্ন পদ্ধতি রয়েছে, যেমন Uberjar, Native Image, Docker, এবং WAR। প্রতিটি পদ্ধতির নিজস্ব সুবিধা এবং ব্যবহার ক্ষেত্র রয়েছে, যা ডিপ্লয়মেন্টের চাহিদা অনুযায়ী পছন্দ করা যায়। Uberjar এবং Docker সাধারণত সহজ পদ্ধতি হিসেবে বেশি ব্যবহৃত হয়, যেখানে Native Image উচ্চ কার্যক্ষমতা প্রয়োজন হলে এবং WAR জাভা ওয়েব সার্ভার পরিবেশে প্রয়োজনীয় হয়ে ওঠে।
common.read_more